package swingxrcp.framework.model.environment;

import java.text.MessageFormat;
import java.util.Locale;
import java.util.MissingResourceException;

/**
 * 国际化信息接口
 *
 * @author liangfei
 *
 */
public abstract class MessageSource {

	/**
	 * 获取默认的本地信息资源
	 *
	 * @param locale
	 *            区域
	 * @param key
	 *            索引
	 * @param args
	 *            动态参数
	 * @return 本地信息资源
	 */
	public String getMessage(Locale locale, String key, Object... args) {
		return formatMessage(locale, getMessage(locale, key), args);
	}

	/**
	 * 获取默认的本地信息资源
	 *
	 * @param locale
	 *            区域
	 * @param key
	 *            索引
	 * @return 本地信息资源
	 */
	public String getMessage(Locale locale, String key) {
		if (key == null)
			return null;
		try {
			String msg = findMessage(locale, key);
			if (msg == null)
				return key;
			return msg;
		} catch (MissingResourceException e) {
			return key;
		}
	}

	/**
	 * 格式化国际化信息, 替换占位符{0}{1}等
	 */
	protected String formatMessage(Locale locale, String msg, Object[] args) {
		if (msg != null && msg.length() > 0 && args != null && args.length > 0) {
			return new MessageFormat(msg, locale).format(args);
		}
		return msg;
	}

	protected abstract String findMessage(Locale locale, String key);

}
